From 11b4e0d4c01f695e876664685ddd07d3f4c5f1df Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 3 Jun 2020 12:57:38 -0400 Subject: [PATCH] columnview: Add a GtkColumnView:reorderable property This property controls if users can reorder columns by drag-and-drop. It defaults to TRUE. --- docs/reference/gtk/gtk4-sections.txt | 2 + gtk/gtkcolumnview.c | 62 ++++++++++++++++++++++++++++ gtk/gtkcolumnview.h | 7 ++++ 3 files changed, 71 insertions(+) diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index a43604c216..20f8352592 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -507,6 +507,8 @@ gtk_column_view_set_show_separators gtk_column_view_sort_by_column gtk_column_view_set_single_click_activate gtk_column_view_get_single_click_activate +gtk_column_view_set_reorderable +gtk_column_view_get_reorderable GTK_COLUMN_VIEW GTK_COLUMN_VIEW_CLASS diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index bda7cdbc61..414ca0d83d 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -70,6 +70,8 @@ struct _GtkColumnView GtkAdjustment *hadjustment; + gboolean reorderable; + gboolean in_column_resize; int drag_pos; int drag_x; @@ -92,6 +94,7 @@ enum PROP_VADJUSTMENT, PROP_VSCROLL_POLICY, PROP_SINGLE_CLICK_ACTIVATE, + PROP_REORDERABLE, N_PROPS }; @@ -361,6 +364,10 @@ gtk_column_view_get_property (GObject *object, g_value_set_boolean (value, gtk_column_view_get_single_click_activate (self)); break; + case PROP_REORDERABLE: + g_value_set_boolean (value, gtk_column_view_get_reorderable (self)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -432,6 +439,10 @@ gtk_column_view_set_property (GObject *object, gtk_column_view_set_single_click_activate (self, g_value_get_boolean (value)); break; + case PROP_REORDERABLE: + gtk_column_view_set_reorderable (self, g_value_get_boolean (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -528,6 +539,18 @@ gtk_column_view_class_init (GtkColumnViewClass *klass) FALSE, G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY); + /** + * GtkColumnView:reorderable: + * + * Whether columns are reorderable + */ + properties[PROP_REORDERABLE] = + g_param_spec_boolean ("reorderable", + P_("Reorderable"), + P_("Whether columns are reorderable"), + TRUE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (gobject_class, N_PROPS, properties); /** @@ -726,6 +749,8 @@ gtk_column_view_init (GtkColumnView *self) g_quark_from_static_string (I_("view"))); gtk_widget_set_overflow (GTK_WIDGET (self), GTK_OVERFLOW_HIDDEN); + + self->reorderable = TRUE; } /** @@ -1081,3 +1106,40 @@ gtk_column_view_get_single_click_activate (GtkColumnView *self) return gtk_list_view_get_single_click_activate (self->listview); } + +/** + * gtk_column_view_set_reorderable: + * @self: a #GtkColumnView + * @reorderable: whether columns should be reorderable + * + * Sets whether columns should be reorderable by dragging. + */ +void +gtk_column_view_set_reorderable (GtkColumnView *self, + gboolean reorderable) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW (self)); + + if (self->reorderable == reorderable) + return; + + self->reorderable = reorderable; + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_REORDERABLE]); +} + +/** + * gtk_column_view_get_reorderable: + * @self: a #GtkColumnView + * + * Returns whether columns are reorderable. + * + * Returns: %TRUE if columns are reorderable + */ +gboolean +gtk_column_view_get_reorderable (GtkColumnView *self) +{ + g_return_val_if_fail (GTK_IS_COLUMN_VIEW (self), TRUE); + + return self->reorderable; +} diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h index 0866b6449c..5cff5d73dc 100644 --- a/gtk/gtkcolumnview.h +++ b/gtk/gtkcolumnview.h @@ -92,6 +92,13 @@ void gtk_column_view_set_single_click_activate (GtkColumnView GDK_AVAILABLE_IN_ALL gboolean gtk_column_view_get_single_click_activate (GtkColumnView *self); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_set_reorderable (GtkColumnView *self, + gboolean reorderable); +GDK_AVAILABLE_IN_ALL +gboolean gtk_column_view_get_reorderable (GtkColumnView *self); + + G_END_DECLS #endif /* __GTK_COLUMN_VIEW_H__ */ -- 2.30.2